Go switch vs if-else效率
全部标签 这个问题在这里已经有了答案:IsthereageneralconsensusintheC++communityonwhenexceptionsshouldbeused?[closed](11个答案)关闭9年前。我在很多地方都使用过if...else语句,但是我对异常处理还是陌生的。这两者的主要区别是什么?例如:int*ptr=new(nothrow)int[1000];if(ptr==NULL){//Handleerrorcaseshere...}或try{int*myarray=newint[1000];}catch(exception&e){cout所以我们在这里使用标准异常类,它
我一直在尝试优化一些处理原始像素数据的代码。目前代码的C++实现速度太慢,所以我一直在尝试在MSVC2008中使用SSE内在函数(SSE/2/3不使用4)。考虑到这是我第一次深入挖掘,我'我们取得了一些不错的进展。不幸的是,我遇到了一段让我卡住的特定代码://Beginbad/suboptimalSSEcode__m128ivnMask=_mm_set1_epi16(0x0001);__m128ivn1=_mm_and_si128(vnFloors,vnMask);for(intm=0;m目前,我在这部分默认使用C++实现,因为我无法完全理解如何使用SSE对其进行优化-我发现SSE内在
我有问题要纠正我对使用索引访问(使用运算符[])或使用迭代器访问vector元素的效率的理解。我的理解是“迭代器”比“索引访问”更有效率。(我还认为vector::end()比vector::size()更有效)。现在我写了示例代码来测量它(在Windows7下使用Cygwin,使用g++4.5.3)索引访问循环版本(以前标记为随机访问):intmain(){std::vectorvec(10000000);size_tvalue=0;for(size_tx=0;x迭代器循环代码是这样的:for(std::vector::iteratoriter=vec.begin();iter!=v
我一直认为在处理文本文件时,首先将内容(或其中的一部分)读入std::string或char数组会更有效,因为——根据我有限的理解——文件被读取从比单个字符大得多的block中的内存中提取。但是,我听说现代操作系统实际上通常并不直接从文件中读取数据,这使得我手动缓冲输入几乎没有什么好处。假设我想确定文本文件中某个字符的数量。以下会不会效率低下?while(fin.get(ch)){if(ch=='n')++char_count;}当然,我想这取决于文件大小,但有没有人对什么是最佳方法有任何一般规则? 最佳答案 这里很大程度上取决于性
我有一些遗留代码,用于使用巨大的if/elseif/elseif...block实现的消息传递系统。当我想添加一个新的elseblock时,VisualStudio2010出现“内部编译器错误”。您是否知道C++标准或实现是否定义了else语句的最大数量?如果定义了实现,我可以在哪里找到VisualStudio2010的最大数量?由于历史原因,我无法更改代码,即使实现...不是很明智。 最佳答案 C++标准没有最低要求。它有一个推荐的最低要求,但不是必需的。Nestinglevelsofcompoundstatements,iter
#include#defineMY_CHK_DEF(flag)\#ifdef(flag)\std::cout编译器报告:main.cpp:3:24:错误:'#'后面没有跟宏参数有什么想法吗?谢谢 最佳答案 你做不到。#if、#else和#endif必须是逻辑行上的第一个标记。你的定义只是一条逻辑线,所以它不起作用, 关于c++-如何在C宏中使用#if,#else,#endif...,我们在StackOverflow上找到一个类似的问题: https://sta
我最近一直在为我正在进行的研究项目编写一些代码,其中效率非常重要。我一直在考虑放弃我做事时使用的一些常规方法,改用按位异或。我想知道的是这是否会有所不同(如果我执行此操作说几百万次)或者我在g++中使用03后它是否相同。想到的两个例子:我有一个例子(我正在处理纯正整数)如果n是奇数,我需要将n更改为n-1,如果n是偶数,则需要将n更改为(n+1)。我想我有几个选择:if(n%2)//or(n%2==0)andfliptheordern=n-1elsen=n+1或n=n+2*n%2-1;//Thisofcoursewassilly,butwastheonlynon-bitwise1lin
(我不是很需要这个答案,我只是好奇。)是否可以使用条件运算符?:将每个if-else结构替换为等效的条件表达式? 最佳答案 Doeseveryif-elseconstructscanbereplacedbyanequivalentconditionalexpressionusingconditionaloperator?不,你问反了。if/else的“主体”包含语句,不可能将每条语句都变成一个表达式,比如try、while、break语句,以及声明。然而,许多“声明”实际上是变相的表达:++i;blah=42;some_method
我正在尝试改进C++赋值以使其更高效。我是该语言的初学者(一般来说也是编程),所以我只使用我目前所知道的(如果,否则)。我有一个将分数转换为水平的函数,所以任何低于30=1、30-49=2、50-79=3的东西......这是我的做法:if(score1是否有更好的方法来执行此操作,因为我知道这将需要为我的每个分数换行。 最佳答案 这取决于您所说的效率。您可以将每个级别的限制保存在一个数组中intlevel_limits[]={0,30,49,79,[...]};intgetLevel(intscore){intlevel;for(
初学者问题,关于循环效率。我已经开始使用C++(我的第一语言)进行编程,并且一直在使用BjarneStroustrup的“使用C++的原理和实践”。我一直在学习前面的章节,并且刚刚了解了循环的概念。关于循环的第一个练习要求我做以下事情:字符'b'为char('a'+1),'c'为char('a'+2)等,用循环写出具有相应整数值的字符表:a97,b98,...,z122尽管我使用大写字母,但我创建了以下内容:intnumber=64;//integervaluefor@sign,characterbeforeAcharletter=number;//convertsintegertoc